package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 排序自定义类型元素的集合:这里有疑问，稍后再看
 * @author XingHaiYang
 * @date 2022/9/13 16:21
 */
public class SortListDemo2 {
    public static void main(String[] args) {
        List<Point> list = new ArrayList<>();
        list.add(new Point(1,2));
        list.add(new Point(12,22));
        list.add(new Point(3,9));
        list.add(new Point(8,8));
        list.add(new Point(7,6));
        list.add(new Point(19,36));
        list.add(new Point(5,4));
        System.out.println(list);
        /*
            使用该sort方法排序List集合时有一个前提条件:集合元素必须实现了Comparable接口
            可比较接口，sort方法会利用该接口上定义的抽象方法来对元素两两比较从而得知大小后
            进行排序。
            因此元素没有实现该接口则编译不通过。

            该操作具有侵入性:当我们使用一个API时，如果该API反过来要求我们的程序为其修改其它
            额外地方的代码，那么就具有了侵入性，这不利于我们程序的后期维护。
         */
        //        Collections.sort(list);

//        Comparator<Point> c = new Comparator<Point>() {
//            @Override
//            public int compare(Point o1, Point o2) {
//                int len1 = o1.getX()* o1.getX()+o1.getY()* o1.getY();
//                int len2 = o2.getX()* o2.getX()+o2.getY()* o2.getY();
////                return len1-len2;
//                return len2-len1;//降序就是反过来减
//            }
//        };
//        Collections.sort(list,c);
        Collections.sort(list,(o1, o2)->
                o1.getX()* o1.getX()+o1.getY()* o1.getY()
                        -
                        o2.getX()* o2.getX() - o2.getY()* o2.getY());

        System.out.println(list);
    }
}
